//
//  YFDayRecordItem.h
//  PaddleTennisDemo
//
//  Created by Coollang on 2017/10/13.
//  Copyright © 2017年 Coollang-YF. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Realm/Realm.h>
#import "YFSwingDetailItem.h"


@interface YFDayRecordItem : RLMObject

#pragma mark ---- 此间的数据为硬件模拟数据，非正式数据
@property NSInteger foreHandCount;          // 正手次数

/*各类型挥拍数*/
@property NSInteger upForeGaoQiuCount;      // 上正高球数
@property NSInteger upBackGaoQiuCount;      // 上反高球数

@property NSInteger upForeShaQiuCount;      // 上正杀球数
@property NSInteger upBackShaQiuCount;      // 上反杀球数

@property NSInteger upForeDiaoQiuCount;     // 上正吊球数
@property NSInteger upBackDiaoQiuCount;     // 上反吊球数

@property NSInteger downForeTiaoQiuCount;     // 下正挑球数
@property NSInteger downBackTiaoQiuCount;     // 下反挑球数

@property NSInteger downForeChouQiuCount;     // 下正抽球数
@property NSInteger downBackChouQiuCount;     // 下反抽球数

@property NSInteger upForeDangQiuCount;     // 上正挡球数
@property NSInteger upBackDangQiuCount;     // 上反挡球数

@property NSInteger downForeDangQiuCount;   // 下正挡球数
@property NSInteger downBackDangQiuCount;   // 下反挡球数


@property NSInteger downForeCuoQiuCount;     // 下正搓球数
@property NSInteger downBackCuoQiuCount;     // 下反搓球数

@property NSInteger upForeNotStandQiuCount;  // 上正非标球数
@property NSInteger upBackNotStandQiuCount;  // 上反非标球数

@property NSInteger downForeNotStandQiuCount;  // 下正非标球数
@property NSInteger downBackNotStandQiuCount;  // 下反非标球数

#pragma mark ----------------------------------
// Swing Details
@property RLMArray <YFSwingDetailItem> *detailItems;

@property NSString *identification;
@property NSString *userId;

@property long long dateTimeStamp;          // day time stamp
@property NSInteger exerciseTimeInterval;   // exerciseTime (min)

/** 运动时间（秒） */
@property  (nonatomic,assign)NSInteger sportTimeInterval;

/**----- 根据运动详情计算得到的值 --------**/
@property NSInteger dayAmountOfCount;       // 当天挥拍总次数
@property NSInteger avgSpeed;               // 当天平均速度
@property NSInteger maxSwingSpeed;          // 当天最大挥拍速度
@property CGFloat maxStrength;              // 最大挥怕力度
@property CGFloat avgStrength;              // 平均挥拍力度
@property NSInteger sweetHitTimes;          // 击中甜区次数
@property CGFloat dayCalories;              // 平均挥拍力度

@property NSString *deviceMac;// 数据生成的硬件Mac
@property NSString *firewareVersion;// 数据生成的硬件版本号

/** Whether the motion details data are synchronized: default NO */
@property  BOOL isSyncDetailReportData;
/* 统计数据：是否同步到网络上 */
//@property  BOOL isSyncToServer;
/* 网络更新时间 */
@property NSInteger serverUpdateTime;
/* 本地修改更新时间 */
@property NSInteger locationUpdateTime;

/* 详情：是否同步到网络上 */
@property  BOOL isSyncDetialToServer;

@property NSString *dayDate;// 日期

- (void)dayRecordItemFormDeviceDict:(NSDictionary *)dict;
- (void)dayRecordItemFormServerDict:(NSDictionary *)dict;

// 数据上传到服务器
- (NSDictionary *)dayRecordItemToDict;


// 获取当前用户所有的天统计数据
+ (RLMResults *)getUserAllDayRecordItems;
// 将数据存储到本地
+ (void)saveDayRecoedItemToDocument:(YFDayRecordItem *)dayRecord update:(BOOL)update;

// 添加详情数据
- (void)addDetailItems:(NSArray *)detailItems isOpenTransaction:(BOOL)openTransaction;
// 根据详情数据计算统计数据
- (void)calculateStatisticsValue;
/**
 * 添加详情数据
 * update: YES 当已存在是覆盖旧值，NO 当已存在时不存入数据库
 * 注意：详情数据的时间戳可能会重复
 * returen: 返回值，当为YES 则表明已经存在，当为NO，表明本地没有
 */
- (BOOL)addDetailItem:(YFSwingDetailItem *)detailItem isUpdate:(BOOL)update;

@end
RLM_ARRAY_TYPE(YFDayRecordItem)
